#include <iostream>
//#include <MathLibrary/include/MathLibrary.h>
#include <MathLibrary/include/Vector.hpp>
#include <MathLibrary/include/Matrix.hpp>
using namespace std;
using namespace MathLibrary;

int main()
{

	//Test for constructors
	Vector2f alma(10.0f, 1.0f);

	float k[2] = {1, 1};
	Vector2f k2(k);
	cout << k2 << alma;

	//test for operators
	cout << alma + k2;
	cout << alma - k2;
	cout << 3 * alma * 3;
	cout << alma / 3;
	alma += k2;
	cout << alma;
	alma -= k2;
	cout << alma;
	alma *= 2;
	cout << alma;


	cout << alma.dot(k2) << endl;
	cout << "Norm" << alma.norm() << endl;
	cout << alma.squaredNorm() << endl;
	alma.normalize();
	cout << alma;
	cout << alma.squaredNorm() << endl;


	Vector3f v3(1,2,3);
	Vector3f v32(3,3,3);

	cout <<"Vec 3: " << v3 << endl;
	cout <<"Vec 3: " << v3 + v32 << endl;
	cout <<"Vec 3: " << v3 - v32 << endl;
	cout <<"Vec 3: " << 3* v3 * 3 << endl;
	cout <<"Vec 3: " <<  v3 / 3 << endl;
	cout <<"Vec 3: " << v3 / 0.1 << endl;
	cout <<"Vec 3: " << v3.squaredNorm() << endl;
	v3 += v32;
	v3 -= v32;

	cout << "Homoge: " << v3.homogeneous();
	v32 << 1,0,0;
	Vector4f b(0,0,0,1);
	cout << "\nAlma:\n" <<v32.cross(Vector3f(0,1,0))  << endl;


	/*
	v3 *= 0;
	cout <<"Vec 3: " << v3 << endl;
	//assert
	//cout <<"Vec 3: " << v3.getMagnitude() << endl;
	//v3 /= 0;
	
	Vector4f v4(1,2,3);
	Vector4f v42(3,3,3);

	cout <<"Vec 4: " << v4 << endl;
	cout <<"Vec 4: " << v4 + v42 << endl;
	cout <<"Vec 4: " << v4 - v42 << endl;
	cout <<"Vec 4: " << 3* v4 * 3 << endl;
	cout <<"Vec 4: " << 3 / v4 / 3 << endl;
	cout <<"Vec 4: " << v4 / 0.1 << endl;
	cout <<"Vec 4: " << v4.getMagnitude() << endl;
	v4 += v42;
	v4 -= v42;
	
	v4 *= 0;
	cout <<"Vec 4: " << v4 << endl;
	//assert
	//cout <<"Vec 4: " << v4.getMagnitude() << endl;
	//v3 /= 0;



	//Matrix
	Matrix2f m;
	m<<20,2,3,5;
	cout << m << endl;


	*/
	cout << "MathLibrary Test Passed!" << endl;
	cin.get();
	return 0;
}
